package br.edu.unipampa.campeonato;

import br.edu.unipampa.clube.Clube;
import java.util.ArrayList;
import utilitario.InicializadorDeObjetos;

/**
 * @author Antoni, Gean, Vinicius
 * matricula 121150124,121151418, 121151385
 * @version 1.1
 * @since 8/03/13
 */
public class Campeonato {
    private String nome;                                                        //Nome do campeonato
    private Double premiaçao;                                                    //Premiaçao do campeonato
    private ArrayList<Clube> clubes;                                             //Clubes que estao no campeonato
    private int numeroDaRodada;                                                   //Controla as rodadas do campeonato
    private InicializadorDeObjetos iniciar;                                       //Atributo necesario para a criacao dos jogadores e times
    
    /**
     * Método construtor da classe que inicializa seus atributos
     * passados como parametros, instancia o InicializadorDeObjetos
     * seta o numero da rodada e chama o metodo tabelaPrimeiraRodada,
     * que define quais times irao se enfrentar nessa rodada
     * 
     * @param nome, do tipo String
     * @param premiaçao , do tipo Double
     */
    public Campeonato(String nome, Double premiaçao) {
        this.nome = nome;
        this.premiaçao = premiaçao;
        iniciar = new InicializadorDeObjetos();
        clubes = iniciar.getClubes();
        numeroDaRodada = 1;
        tabelaPrimeiraRodada();
    }

    /**
     * Método que define quais times irao se enfrentar nessa rodada
     * 
     *@return clubes, do tipo ArrayList 
     */
    public ArrayList<Clube> tabelaPrimeiraRodada() {
        ArrayList<Clube> clubes = new ArrayList<Clube>();
        getClubes().get(0).setClubeQueEnfrenta(getClubes().get(4));
        getClubes().get(1).setClubeQueEnfrenta(getClubes().get(5));
        getClubes().get(2).setClubeQueEnfrenta(getClubes().get(6));
        getClubes().get(3).setClubeQueEnfrenta(getClubes().get(7));
        for (int i = 0; i < getClubes().size(); i++) {
            clubes.add(getClubes().get(i));
        }
        return clubes;
    }

    /**
     * Método que define quais times irao se enfrentar nessa rodada
     * 
     *@return clubes, do tipo ArrayList 
     */
    public ArrayList<Clube> tabelaSegundaRodada() {
        ArrayList<Clube> clubes = new ArrayList<Clube>();
        getClubes().get(1).setClubeQueEnfrenta(getClubes().get(0));
        getClubes().get(2).setClubeQueEnfrenta(getClubes().get(3));
        getClubes().get(4).setClubeQueEnfrenta(getClubes().get(5));
        getClubes().get(6).setClubeQueEnfrenta(getClubes().get(7));
        for (int i = 0; i < getClubes().size(); i++) {
            clubes.add(getClubes().get(i));
        }
        return clubes;
    }

    /**
     * Método que define quais times irao se enfrentar nessa rodada
     * 
     *@return clubes, do tipo ArrayList 
     */
    public ArrayList<Clube> tabelaTerceiraRodada() {
        ArrayList<Clube> clubes = new ArrayList<Clube>();
        getClubes().get(0).setClubeQueEnfrenta(getClubes().get(3));
        getClubes().get(6).setClubeQueEnfrenta(getClubes().get(1));
        getClubes().get(7).setClubeQueEnfrenta(getClubes().get(4));
        getClubes().get(5).setClubeQueEnfrenta(getClubes().get(2));
        for (int i = 0; i < getClubes().size(); i++) {
            clubes.add(getClubes().get(i));
        }
        return clubes;
    }

    /**
     * Método que define quais times irao se enfrentar nessa rodada
     * 
     *@return clubes, do tipo ArrayList 
     */
    public ArrayList<Clube> tabelaQuartaRodada() {
        ArrayList<Clube> clubes = new ArrayList<Clube>();
        getClubes().get(7).setClubeQueEnfrenta(getClubes().get(0));
        getClubes().get(3).setClubeQueEnfrenta(getClubes().get(1));
        getClubes().get(4).setClubeQueEnfrenta(getClubes().get(2));
        getClubes().get(5).setClubeQueEnfrenta(getClubes().get(6));
        for (int i = 0; i < getClubes().size(); i++) {
            clubes.add(getClubes().get(i));
        }
        return clubes;
    }
    
    /**
     * Método que define quais times irao se enfrentar nessa rodada
     * 
     *@return clubes, do tipo ArrayList 
     */
    public ArrayList<Clube> tabelaQuintaRodada() {
        ArrayList<Clube> clubes = new ArrayList<Clube>();
        getClubes().get(0).setClubeQueEnfrenta(getClubes().get(2));
        getClubes().get(7).setClubeQueEnfrenta(getClubes().get(1));
        getClubes().get(3).setClubeQueEnfrenta(getClubes().get(5));
        getClubes().get(4).setClubeQueEnfrenta(getClubes().get(6));
        for (int i = 0; i < getClubes().size(); i++) {
            clubes.add(getClubes().get(i));
        }
        return clubes;
    }

    /**
     * Método que define quais times irao se enfrentar nessa rodada
     * 
     *@return clubes, do tipo ArrayList 
     */
    public ArrayList<Clube> tabelaSextaRodada() {
        ArrayList<Clube> clubes = new ArrayList<Clube>();
        getClubes().get(0).setClubeQueEnfrenta(getClubes().get(6));
        getClubes().get(1).setClubeQueEnfrenta(getClubes().get(2));
        getClubes().get(3).setClubeQueEnfrenta(getClubes().get(4));
        getClubes().get(5).setClubeQueEnfrenta(getClubes().get(7));
        for (int i = 0; i < getClubes().size(); i++) {
            clubes.add(getClubes().get(i));
        }
        return clubes;
    }

    /**
     * Método que define quais times irao se enfrentar nessa rodada
     * 
     *@return clubes, do tipo ArrayList 
     */
    public ArrayList<Clube> tabelaSetimaRodada() {
        ArrayList<Clube> clubes = new ArrayList<Clube>();
        getClubes().get(0).setClubeQueEnfrenta(getClubes().get(5));
        getClubes().get(3).setClubeQueEnfrenta(getClubes().get(6));
        getClubes().get(4).setClubeQueEnfrenta(getClubes().get(1));
        getClubes().get(7).setClubeQueEnfrenta(getClubes().get(2));
        for (int i = 0; i < getClubes().size(); i++) {
            clubes.add(getClubes().get(i));
        }
        return clubes;
    }
    
    /*
     * Método que exibe a tabela de classificaçao das equipes
     * no campeonato
     */
    public void tabelaDeClassificacao(){
        System.out.println("**************** Tabela ****************");
        for (int i = 0; i < clubes.size(); i++) {
            System.out.println(clubes.get(i).getNome() +" - Vitórias: "+clubes.get(i).getVitoria()
                    +" - Derrotas: "+clubes.get(i).getDerrota() +" - Empates: "+clubes.get(i).getEmpate()+" - Pontos: "
                    +clubes.get(i).getPontos());            
        }
        System.out.println("---------------------------------------------------------------------------");
    }
    
    //Métodos sets e gets para acessos dos atributos privados fora dessa classe
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Double getPremiaçao() {
        return premiaçao;
    }

    public void setPremiaçao(Double premiaçao) {
        this.premiaçao = premiaçao;
    }

    public ArrayList<Clube> getClubes() {
        return clubes;
    }

    public void addClubes(Clube clube) {
        getClubes().add(clube);
    }

    public int getNumeroDaRodada() {
        return numeroDaRodada;
    }

    public void setNumeroDaRodada(int numeroDaRodada) {
        this.numeroDaRodada = numeroDaRodada;
    }

    public InicializadorDeObjetos getIniciar() {
        return iniciar;
    }
}
